//-------------子窗口

function send2parent(message){  //向父窗口发送消息，参数为消息
    parent.postMessage(message,"*" );//作用域可以限制ip，这里全开
}
window.addEventListener('message',function(e){//监听到json包含"fn"元素，执行自身已定义的"fn"对应的value的函数名
    if(e.data.hasOwnProperty("fn")){
         var fn=e.data['fn'];
         console.log(fn);
         eval(fn)();
         return;
     }
    msg=e.data;
    if(msg['uid']=="u123456"){
        console.log("合法用户"); //判断父窗口传过来的json消息并执行对应的功能
        
    }
         
        },false);

function runmain(fn_name){ //向父窗口方式json，带fn参数，父窗口接受到后使用eval()执行自己的fn_name函数
    var dict1={"fn":fn_name}; 
    parent.postMessage(dict1,"*");
}

//-------------父窗口
var html='<div id="home" style="display:block;width:100%;height:100%"><iframe id="myframe" src="http://118.25.210.158:1234/home.html" name="frame2" style="display:block;width:100%;height:100%"></iframe></div>';
//页面上创建一个div用来加载子窗口页面，其中iframe标签内 name为父窗口上显示的子窗口名字，id仅仅用来sen2child传参


var host="https://gitee.com/";  //子窗口页面地址，可以是github或者gitee等代码仓库
function send2child(childid,message){ //给子窗口发送消息（子窗口id,要发送的消息）
    var iframe = document.getElementById(childid);
    iframe.contentWindow.postMessage(message, '*');
}
function runchild(childid,fn_name){//向子窗口方式json，带fn参数，子窗口接受到后使用eval()执行自己的fn_name函数
    var iframe = document.getElementById(childid);
    var dict1={"fn":fn_name}; 
    iframe.contentWindow.postMessage(dict1, '*');
}

window.addEventListener("message", function(e) { //监听子窗口发来的消息
    if (e.origin !== host) return; //只监听这个ip的子窗口（由于一个父窗口有多个子窗口，我只监听指定的host,这里码云为例子）
    
    if(e.data.hasOwnProperty("update")){//监听到json包含"update"元素，执行打开网页链接进行更新
         var url=e.data['update'];
         window.open(url);
     }
    if(e.data.hasOwnProperty("fn")){//监听到json包含"fn"元素，执行自身已定义的"fn"对应的value的函数名
         var fn=e.data['fn'];
         console.log(fn);
         eval(fn)();
     }
     else{alert("非json参数\n"+e.data)}
    });
    
    
//-------------子窗口进行ajax操作get post服务器数据
var host="http://118.25.210.158:1234/"; //做网络验证的服务器地址，可以是域名或者ip

function isjson(obj){ //判断一个变量对象是否为json。内部变量单双引号都行
    if(typeof(obj) == "object" && Object.prototype.toString.call(obj).toLowerCase() == "[object object]" && !obj.length){
        return true;
    }
    else{
        return false;
    }
}
function str2obj(str){
    var obj=eval('(' + str + ')'); //字符串类型转内部类型 如"[1,2,3]" 转换得到[1,2,3]
    return obj;
}
function isJSON(str) { //判断字符串是否为json格式。内部变量只能双引号，不能单引号
    if (typeof str == 'string') {
        try {
            //var obj=str.substring(1, str.length - 1);
            obj=str2obj(str);
            console.log(obj);
            if(isjson(obj)){
                return true;
            }
            else{
                return false;
            }
        } catch(e) {
            console.log(e);
            return false;
        }
    }
    return false;
}


function ajax_get(filename,json,func,mode){ //最后一个参数为默认，默认是传入值，设置为1传id

//json={"name":"login_name","pwd":"login_pwd"};           此参数一般长这样    
if(!isjson(json)){
    console.log('参数传入错误，类型非json');
    return
}
var xmlhttp;
var str="";
var data="";
if(arguments[3]==true){
for(var key in json){ //遍历json里面的键
     //console.log(key+"--"+document.getElementById(json[key]).value);
     if(document.getElementById(json[key]).value==""){
        alert("操作失败，传入参数有空值！");
        return
    }
    str = key+"="+document.getElementById(json[key]).value;
    data += str+"&";   
}
}
else{
for(var key in json){ //遍历json里面的键
     //console.log(key+"--"+json[key]);
     if(json[key]==""){
        alert("操作失败，传入参数有空值！");
        return
    }
    str = key+"="+json[key];
    data += str+"&";   
}     
}
data = data.substring(0, data.length - 1);

if (window.XMLHttpRequest)
{
    //  IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
    xmlhttp=new XMLHttpRequest();
}
else
{
    // IE6, IE5 浏览器执行代码
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
        //document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
        var ret=xmlhttp.responseText;
        func(ret);
    }
}
    xmlhttp.open("GET",host+filename+"?t="+(new Date().getTime())+"&"+data,true);
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlhttp.send();
}

function ajax_post(filename,json,func,mode){ //最后一个参数为默认，默认是传入值，设置为1传id

//json={"name":"login_name","pwd":"login_pwd"};           此参数一般长这样    
if(!isjson(json)){
    console.log('参数传入错误，类型非json');
    return
}
var xmlhttp;
var str="";
var data="";
if(arguments[3]==true){
for(var key in json){ //遍历json里面的键
    //console.log(key+"--"+document.getElementById(json[key]).value);
    if(document.getElementById(json[key]).value==""){
        alert("操作失败，传入参数有空值！");
        return
    }
    str = key+"="+document.getElementById(json[key]).value;
    data += str+"&";   
}
}
else{
for(var key in json){ //遍历json里面的键
     //console.log(key+"--"+json[key]);
     if(json[key]==""){
        alert("操作失败，传入参数有空值！");
        return
    }
    str = key+"="+json[key];
    data += str+"&";   
}     
}
data = data.substring(0, data.length - 1);

if (window.XMLHttpRequest)
{
    //  IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
    xmlhttp=new XMLHttpRequest();
}
else
{
    // IE6, IE5 浏览器执行代码
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.onreadystatechange=function()
{
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
        //document.getElementById("txtHint").innerHTML=xmlhttp.responseText;
        var ret=xmlhttp.responseText;
        func(ret);
    }
}
    xmlhttp.open("POST",host+filename+"?t="+Math.random()+"&",true);
    xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
    xmlhttp.send(data);
}

function test(ret){
    console.log(ret);
}

ajax_get("login.php",{"name":"dashen","pwd":"123456"},test);



